// common/http.interceptor.js

const install = (Vue, vm) => {
	// 赋值给nvue 使用  eg: uni.$http.get()
	uni.$http = Vue.prototype.$u.http;
	/**
	 * 参数处理
	 * @param {*} params  参数
	 */
	const tansParams = (params) => {
		let result = ''
		for (const propName of Object.keys(params)) {
			const value = params[propName];
			var part = encodeURIComponent(propName) + "=";
			if (value !== null && value !== "" && typeof(value) !== "undefined") {
				if (typeof value === 'object') {
					for (const key of Object.keys(value)) {
						if (value[key] !== null && value[key] !== "" && typeof(value[key]) !== 'undefined') {
							let params = propName + '[' + key + ']';
							var subPart = encodeURIComponent(params) + "=";
							result += subPart + encodeURIComponent(value[key]) + "&";
						}
					}
				} else {
					result += part + encodeURIComponent(value) + "&";
				}
			}
		}
		return result
	}

	// 此为自定义配置参数，具体参数见上方说明
	Vue.prototype.$u.http.setConfig({
		baseUrl: process.uniEnv.appBaseUrl,
		loadingText: vm.$t('http.loading'),
		loadingTime: 1000,
		originalData: true,
		// 设置自定义头部content-type
		header: {
			'content-type': 'application/json;charset=utf-8'
		}
	});

	// 请求拦截部分，如配置，每次请求前都会执行
	Vue.prototype.$u.http.interceptor.request = (config) => {
		const vuexToken = uni.getStorageSync('vuex_token');
		if (vuexToken) {
			config.header['Authorization'] = 'Bearer ' + vuexToken;
		}
		// 服务端多语言
		if (uni.getLocale() == 'zh-Hans') {
			config.header['Accept-Language'] = "zh-CN"
		} else {
			config.header['Accept-Language'] = 'en-us'
		}

		// get请求映射params参数
		if (config.method === 'get' && config.params) {
			let url = config.url + '?' + tansParams(config.params);
			url = url.slice(0, -1);
			config.params = {};
			config.url = url;
		}
		console.log("请求路径:", config);
		return config;
		// 如果return一个false值，则会取消本次请求
		// if(config.url == '/user/rest') return false; // 取消某次请求
	}

	// 响应拦截，如配置，每次请求结束都会执行本方法
	Vue.prototype.$u.http.interceptor.response = (res) => {
		// console.log('请求结果:', res);
		if (res.statusCode == 200) {
			if (res.data.code == 200) {
				return res.data;
			} else if (res.data.code == 401 ) {
				vm.$u.toast(vm.$t('system.accountExpired'));
				vm.$u.debounce(() => {
					uni.removeStorageSync('vuex_token');
					uni.reLaunch({
						url: '/pages/login/login'
					})

				})
		


				return false;
			} else if (res.data.code == 409 ) {
				uni.dialog.confirm(vm.$t('system.accountError'),()=>{
				                  
				                    vm.$u.debounce(() => {
				                    	uni.removeStorageSync('vuex_token');
				                    	uni.reLaunch({
				                    		url: '/pages/login/login'
				                    	})
				                    
				                    })
				                },()=>{
				                },vm.$t('system.affirm'),vm.$t('system.cancel'),vm.$t('system.Hint'));
			
		
			


				return false;
			}else {
				console.log("网络请求错误：", res)
				vm.$u.toast(res.data.message || res.data.msg);
				return false
			}
		} else {
			console.log(res)
			vm.$u.toast(res.message || vm.$t('http.error'));
			return false;
		}
	}
}

export default {
	install
}
